package com.finapps.stopspend.dao;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import com.finapps.stopspend.entidades.ObjetivoEntity;
import com.finapps.stopspend.entidades.SituacioObjectiu.ColorSituacio;
import com.finapps.stopspend.util.CalendarUtils;

public class ObjectiusDAO {
	private static final String[] PLACE_COLUMNS={"id","data","nom","descripcio","saldo","falta", "color"};
	private static final String NAMETABLE = "Objectius";
	/**
	 * Cal que retorni els objetius ordenats per data, de m�s proper a menys.
	 * @return
	 */
	public List<ObjetivoEntity> getObjectius() {
		List<ObjetivoEntity> list = new ArrayList<ObjetivoEntity>();
		Cursor cursor = null;
		Database database = Database.get();
		SQLiteDatabase db = database.open();
		cursor = db.query(NAMETABLE, PLACE_COLUMNS, null, null, null, null, null);
		if(cursor.moveToFirst()) {
			do {
				ObjetivoEntity obj = createObject(cursor);
				list.add( obj );
			} while(cursor.moveToNext());
		}
		cursor.close();
		database.close();
		return list;
	}
	
	public void saveObjectiu(ObjetivoEntity entity) {
		if(entity.getId() != null){
			updateObjectiu(entity);
			return;
		}
		Database database = Database.get();
		SQLiteDatabase db = database.open();
		@SuppressWarnings("unused")
		CalendarUtils utils;
		
		int valor = 1;
		if (entity.getColorSituacio() == ColorSituacio.VERD) valor = 1;
		else if (entity.getColorSituacio() == ColorSituacio.GROC || entity.getColorSituacio() == ColorSituacio.TARONJA) valor = 2;
		else valor = 4;
		
		Log.i("STOP", "Color recibido para insertar: " + entity.getColorSituacio());
		db.execSQL("INSERT INTO Objectius(data,nom,descripcio,saldo,falta,color) VALUES('"+
				CalendarUtils.calendar2Data(entity.getData())+"','"+
				entity.getTitulo()+"','"+entity.getDescripcion()+"','"+
				entity.getPrecio()+"','"+entity.getFalta()+
				"','"+valor+"')");
		database.close();
	}
	
	private void updateObjectiu(ObjetivoEntity entity) {
		Database database = Database.get();
		SQLiteDatabase db = database.open();
		db.execSQL("UPDATE "+NAMETABLE+" set data='"+entity.getData() + "',nom='"+entity.getTitulo()+
				"',descripcio='"+entity.getDescripcion()+
				"',saldo='"+entity.getPrecio()+"',falta='"+entity.getFalta()+"',color='"+entity.getColorSituacio()+
				"' Where id='"+
				entity.getId().toString()+"' ");
		database.close();
	}
	
	public void deleteObjectiu(ObjetivoEntity entity) {
		Database database = Database.get();
		SQLiteDatabase db = database.open();
		db.delete(NAMETABLE, "id=?", new String[]{
		          entity.getId().toString() });
		database.close();
	}
	private ObjetivoEntity createObject(Cursor cursor){
		BigDecimal cost = new BigDecimal(cursor.getDouble(4));
		BigDecimal falta = new BigDecimal(cursor.getDouble(5));
		ObjetivoEntity obj = new ObjetivoEntity(cursor.getLong(0),cursor.getString(2),cursor.getString(3),
				cost,falta);
		obj.setData(CalendarUtils.data2Calendar( cursor.getString(1) ) );
		
		return obj;
	}
}	
